#ifndef _UART_H_
#define _UART_H_
#include <stdbool.h>
#include "stm32f10x.h"

typedef enum
{
    UART_1,
    UART_2,
    UART_3,
    UART_4,
    UART_NUM
}UART_ID;

typedef void(*pUartCallback)(bool);

typedef unsigned long(*pUartGetTimeStamp)(void);

typedef void(*pUartReceiveCallback)(uint8_t* buff,uint16_t len);


/**
* @函数名:      UartInit
* @功能描述:    初始化串口
* @输入参数:    
* @输出参数:    无
* @返回值:      无
*/
void UartInit(UART_ID,uint32_t baud,uint8_t* receiveBuff,uint16_t maxLen,uint32_t interval,pUartReceiveCallback f);

/**
* @函数名:      UartDeinit
* @功能描述:    反初始化串口
* @输入参数:    
* @输出参数:    无
* @返回值:      无
*/
void UartDeinit(UART_ID);

/**
* @函数名:      UartRead
* @功能描述:    读取串口数据
* @输入参数:    needCopy:是否需要拷贝,buf：拷贝的数据，len最大读取字节数
* @输出参数:    无
* @返回值:      实际读到的字节数
*/
uint16_t UartRead(UART_ID,bool needCopy,uint8_t* buf,uint16_t len);

/**
* @函数名:      UartSend
* @功能描述:    写串口数据
* @输入参数:    buf：写入的数据，len写入的字节数
* @输出参数:    无
* @返回值:      是否成功发送
*/
bool UartSend(UART_ID,const uint8_t *buf,uint16_t len);

/**
* @函数名:      SetUartTimeStamp
* @功能描述:    设置1msTICK函数
* @输入参数:    pUartGetTimeStamp
* @输出参数:    无
* @返回值:      无
*/
void SetUartTimeStamp(pUartGetTimeStamp fun);

#endif
